管理数据库迁移
Laravel鼓励一个敏捷的、迭代的开发风格。我们不希望把一切正确的第一次。相反,我们编写代码,测试用户改进我们的理解并与之交互。

对于这个工作,我们需要一套支持的实践。我们使用版本控制工具如subversion,git和hg存储应用程序的源代码文件,允许我们撤销错误和跟踪变化的过程中发展。

但还有另一个领域的应用程序更改,一个不能单独使用版本控制进行有效的管理。Laravel应用程序中的数据库模式不断发展我们进步通过发展:我们添加一个表,重命名列,删除索引等等。步骤与应用程序中的数据库更改的代码。

通常有几种情况你需要一个复杂的方法来跟踪你的数据库模式的变化:

当你在一个团队工作的开发人员,每个人需要知道任何模式的变化。

当您部署在生产服务器上,你需要有一个健壮的方式来升级你的数据库模式。

如果你在多个机器上工作,您需要把所有数据库模式同步。

没有严格的规范和应用程序开发人员遵守纪律,保持数据库模式与应用程序代码同步传统上是一个非常麻烦的工作。开发人员(或数据库管理员)模式变化。然而,如果应用程序代码回滚到之前的版本,很难撤消数据库模式的变化将数据库返回符合之前的应用程序版本ΓCo数据库本身没有版本控制信息。

迁移是Laravel的方式帮助您发展您的应用程序的数据库模式(也称为DDL)无需删除和重建数据库每次你做出改变。并没有删除和重新创建数据库每次发生改变意味着你不会失去你的开发数据。唯一的更改在执行迁移时那些必要的移动模式从一个版本到另一个地方,是否向前或向后移动。

Laravel迁移不仅为你提供一种手段改变你的数据库模式以迭代的方式,但它允许您使用PHP代码,而不是SQL !Laravel模式Builder允许我们快速创建数据库表并插入列或指数。它使用清洁和表达的语法来实现数据库操作。你可能认为Laravel迁移版本控制的数据库!

通过定义一个更高级别的接口来创建和维护数据库模式,您可以定义一个数据库无关的方式。通过使用PHP创建表和列定义或指数的方法,您可以编写模式一旦应用到任何数据库后端支持。额外的好处是,Laravel跟踪的迁移已经应用和哪些还需要应用。

迁移的基础
Laravel迁移是一个简单的PHP应用程序的源文件 app/database/migrations文件夹中。每个文件包含一组离散的底层数据库的变化。更改数据库是在PHP中,而不是一个特定于数据库的SQL的味道。PHP代码迁移最终被转化为特定于您的当前数据库的DDL。这使得切换数据库平台非常容易。由于迁移是保存在自己的目录,它是务实的,包括到版本控制就像任何其他项目的代码。Laravel迁移从命令行运行显式地使用 artisan工具。

迁移文件命名约定

在Laravel旧版本,迁移文件相对简单的名称,如 001_create_authors_table.php。Laravel 3带来了新的命名约定,名称的第一部分从更长的时间戳顺序号码, 2012_12_25_161424_create_authors_table.php。表单的文件的名称 YYYY_MM_DD_HHMMSS_some_meaningful_name.php,也就是说UTC时间戳识别迁移的名称,后跟一个下划线,迁移。

新的更广泛的名字有助于避免名称冲突如果你是一个开发人员在一个团队工作,很多人可以检查自己的迁移。

此外,Laravel迁移文件加上时间戳,以便他们可以按顺序执行。数字时间戳是迁移的关键,因为它们定义的顺序迁移应用ΓCo他们是个体迁移的版本号。

像SQL脚本,迁移可以建立在彼此之上,这强化了这些文件需要按顺序执行。顺序执行删除的可能性,例如,任何试图添加一个新列一个表,还不存在。

虽然你可以手动创建这些移民文件,更容易(且不易出错)使用工匠命令行工具来生成迁移脚本。您可以编辑这些文件之后。

运行迁移向前和向后
应用迁移到数据库使用 artisan工具。Laravel提供了一组 artisan任务处理迁移这归结为运行特定设置的迁移。

注意:您可以运行 artisan list看到它所支持的任务列表,和大多数的数据库前缀与移民相关任务 migrate:.

只有少数的任务,你需要知道:

migrate:install

第一个迁移相关艺人任务您将使用可能会 artisan migrate:install。在内部,Laravel使用一个特殊的表来跟踪的迁移已经运行。创建这个表,就使用工匠命令行工具:

$ php artisan migrate:install
migrate

你会跑 migrate任务经常更新您的数据库支持最新的表和列你添加到您的应用程序。在其最基本的形式运行 up()方法的迁移尚未运行。如果没有这样的迁移,它退出。它将运行这些迁移基于迁移的日期。

migrate:rollback

偶尔你会犯错误当写作迁移。如果您已经运行迁移然后你不能再次编辑迁移和运行迁移:Laravel假定它已经运行迁移,因此运行时将什么都不做 artisan migrate。你必须回滚迁移使用 artisan migrate:rollback,编辑你的迁移,然后运行 artisan migrate修正后的版本运行。

一般编辑现有迁移并不是一个好主意:您将创建额外的工作为你和你的同事和造成严重头痛,如果现有版本的迁移已经在生产机器上运行。相反,你应该写一个新的迁移执行需要的更改。

注意: artisan migrate:rollback会让你删除最后一个迁移应用。Laravel回滚整个迁移“操作”。所以,如果最后迁移命令跑15迁移,所有15个迁移将回滚。小心:当Laravel删除一列或表,则丢弃该数据。

migrate:reset

这个任务将回滚所有曾经运行迁移(它毁灭了所有的表和数据)

migrate:refresh

的 artisan migrate:refresh任务将删除数据库,重新创建它,当前模式加载到它。这是一个方便快捷方式运行复位,然后重新运行所有迁移。

migrate:make

的 artisan migrate:make命令告诉Laravel产生一个框架迁移文件(实际上是一个PHP文件) app/database/migrations文件夹中。然后您可以编辑这个文件来充实你的表/索引定义。之后,当您运行 artisan migrate命令,工匠将咨询这个文件来生成实际的SQL DDL代码。

创建迁移
让我们开始创建一个MySql数据库“laravel_db”。下一个打开 database.php文件 app/configLaravel应用程序的目录。确保 default关键是设置为 mysql:

returnarray(
        ...
        'default' => 'mysql',
然后输入你的数据库信息:

...
'connections' => array(
        'mysql' => array(
                'driver'    => 'mysql',
                'host'      => '127.0.0.1',
                'database'  => 'laravel_db',
                'username'  => 'Your_Database_Username',
                'password'  => 'Your_Database_Password',
                'charset'   => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix'    => '',
        ),
...
我们将使用Laravel的命令行工具 artisan创建我们的新移民。运行 artisan你需要打开终端Laravel应用程序的根文件夹的位置 artisan脚本存在。

我们需要做的第一件事是安装安装 migrations表,以便Laravel跟踪的迁移已经运行。以下命令将创建特殊的表在我们的数据库:

$ php artisan migrate:install
如果成功,工匠会回应“好!现在我们准备做一些迁移!”。

如果你检查数据库中,你会发现 artisan确实创造了一个新表“迁移”:

MariaDB [laravel_db]> SHOW TABLES;
+----------------------+
| Tables_in_laravel_db |
+----------------------+
| migrations . . . . . |
+----------------------+
1 row in set (0.00 sec)
你不需要过于担心。这只是一个表,帮助Laravel监视迁移并没有运行。当你添加新的迁移, artisan migrate会检查 migrations表和执行所有尚未运行迁移。

现在,让我们创建一个实际的迁移文件。我们想创建一个新的名为“作者”的表。让我们运行 artisan migrate:make命令:

$ php artisan migrate:make create_authors_table
Migration created successfully!
我们告诉工匠来运行 make方法 migrate任务,我们通过强调分隔单词列表在人类可读的描述我们移民的条件。你可能名字迁移如你所愿,但是你可能想要给它一个名称,描述你做什么。Laravel不在乎迁移叫做什么,它只是对你的理智。在这种情况下,我们正在创建“作者”表,因此我们叫迁移 create_authors_table.

注意:细心的读者可能已经注意到,我们称为作者表“作者”而不是“作者”。这是Laravel的一个方面的设计理念,使用自然语言来帮助我们存储数据模型。Laravel表应该是多元化的版本的模型的名字命名。在的情况下 Author模型,表被命名为“作者”。如果你有一个模型 Car,您将创���一个表称为“汽车”。除此之外,它更有意义 SELECT name FROM authors WHERE id=100比 SELECT name FROM author WHERE id=100.

$ php artisan migrate:make create_authors_table --create --table authors
Migration created successfully!
如果你运行命令你会发现一个新的迁移已被添加。这是什么 app/database/migrations看起来像目录:

$ ls app/database/migrations
2012_12_25_161424_create_authors_table.php
��如你所看到的,我们现在有一个新的迁移文件名字包含时间戳以及迁移的描述性名称。

太棒了!让我们打开新生成的文件,看看移民类。

解剖学的迁移
迁移是Laravel类的子类 Illuminate\Database\Migrations\Migration。您��建的类必须包含至少两类方法 up()和 down()。下面是生成的骨架迁移类 artisan:

<?phpuseIlluminate\Database\Migrations\Migration;

classCreateAuthorsTableextendsMigration {

        /**
        * Run the migrations.
        */publicfunctionup()
        {
                //
        }

        /**
        * Reverse the migrations.
        */publicfunctiondown()
        {
                //
        }

}
与Laravel可以迁移到特定版本的数据模型在任何时候。中的代码 up()方法执行时向前迁移 down()当向后迁移执行(即创建一个新版本的数据库或回滚到以前的版本)。

一个简单的方法来考虑 up()是你想迁移文件执行的动作,然后呢 down()是完全相反的。这就像使用撤销命令在一个文字处理器应用程序——你只是取消所做的修改。举个例子,如果你想创建一个名为“作者”的表,你在创建它 up()方法,然后摧毁它 down()。让我们看看你如何做到这一点。

艺人 migrate:make命令有一些额外的选项,可以加快您的工作流。让我们运行以下命令:

$ php artisan migrate:make create_authors_table --table authors --create
Migration created successfully!
在上面的示例中,我们指定使用的表的名称 --table选择。此外,我们包括 --create选择通知 artisan需要创建表。如果你打开迁移文件你会发现工匠对我们产生了额外的样板代码:

<?phpuseIlluminate\Database\Migrations\Migration;

classCreateAuthorsTableextendsMigration {

        publicfunctionup()
        {
                Schema::create('authors', function($table)
                {
                        $table->increments('id');
                });
        }

        publicfunctiondown()
        {
                Schema::drop('authors');
        }

}
太棒了!现在,让我们更具体。我们将使用Laravel Schema类来创建我们的“作者”表。这是迁移代码创建作者表,并将必要的列添加到表:

publicfunctionup()
{
          Schema::create('authors', function($t) {
              // auto increment id (primary key)$t->increments('id');

              $t->string('name');
              $t->integer('age')->nullable();
              $t->boolean('active')->default(1);
              $t->integer('role_id')->unsigned();
              $t->text('bio');

              // created_at, updated_at DATETIME$t->timestamps();
          });
}
我们所说的 Schema::create()方法来创建一个新的名为“作者”的表。 Schema::create()接受两个参数:表的名称(记住,表名是复数)和一个包含列定义闭包。闭包传递一个表定义对象,我们用来定义表中的列。你可以叫参数无论你喜欢(即。 $table),但我喜欢用 $t(因为它包含更少的输入)。

在关闭时,我们可以使用 $t参数来创建我们的列的方便的方法。模式方法命名根据他们所代表的数据类型。列定义方法的基本结构 $t->column_type(column_name)

列类型
在前面的示例中,我们指定的“名称”列类型的“字符串”。但是这是什么意思?数据库通常没有列类型的“字符串”。

记住,Laravel试图让您的应用程序独立于底层数据库;你可以开发使用MySql和部署到Postgresql如果你想要的,例如。但不同的数据库使用不同的名称列的类型。如果你使用一个MySql列类型的迁移,迁移可能不工作如果Postgres数据库应用。Laravel迁移使你从底层数据库类型系统通过使用通用的数据类型。如果我们迁移一个MySql数据库, string()方法将创建一个列的类型 VARCHAR(255)。Postgres,同样的迁移可能会添加一个列的类型 CHAR VARYING(255)(虽然 VARCHAR类型支持所有主要的数据库平台)。

Laravel直接支持以下数据类型:

Laravel方法	列类型
increments($column)	添加一个自增主键表
string($column)	添加一个 VARCHAR(255)列
string($column, $length)	添加一个 VARCHAR等效长度
integer($column)	增加了一个 INTEGER列的表
float($column)	添加一个 FLOAT列的表
decimal($column, $precision, $scale)	添加一个 DECIMAL列精度和等级。精密数字的总数是一个数字。规模的数字的小数点向右。例如,123.45数量精度5和2的规模。从逻辑上讲,规模不能超过精度。
boolean($column)	添加一个 BOOLEAN列到表中。注意:布尔值的方式存储从数据库到数据库。一些用“1”和“0”整数值代表真与假,分别,而其他人使用字符,如“T”和“F”。Laravel的“boolean“类型映射到一个小整数列所有数据库系统。Laravel处理PHP的之间的映射 true和 false很好,所以你不需要担心自己潜在的方案。
text($column)	TEXT相当于表
blob($column)	BLOB相当于表
binary($column)	BINARY相当于表
dateTime($column)	DATETIME相当于表
timestamp($column)	TIMESTAMP相当于表
date($column)	DATE相当于表
time($column)	TIME相当于表
enum($column, array $allowed)	创建一个新的 ENUM列在表
此外,有一些更多的扩展方法,你需要注意的:

Laravel方法	列类型
timestamps()	timestamps()是不一样的 timestamp()。这是一个方便方法Laravel使用管理创建和修改倍 created_at和 updated_at TIMESTAMP列。他们是两个特殊的数据库列Laravel可以自行修改。的 created_at列修改只有当行创建与当前时间戳。另一方面, updated_at每次修改当前的时间戳的行数据是被操纵的。
nullable()	允许指定的列 NULL值。默认情况下,Laravel使所需的列在数据库级别上添加一个 NOT NULL约束。
default($value)	设置一个默认的初始值作为列新行。你不需要显式地设置默认值为null。只是离开这个选项为空默认值。
unsigned()	集 INTEGER列 UNSIGNED
默认的假设

所有列定义从一些默认的假设开始,您可以根据需要覆盖。

Laravel假定每个表都有一个数字主键(通常叫“id”),并确保该列的值是独一无二的每个新行添加到表中。Laravel并不管用,除非每个表有一个主键数值。所以,平均Laravel应用程序,请确保您使用了定义一个主键 increments()方法。

列是 NOT NULL默认情况下

现在让我们分析模式构建器代码 authors表逐行。这是我们的代码 up()方法:

// auto increment id (primary key)$t->increments('id');

$t->string('name');
$t->integer('age')->nullable();
$t->boolean('active')->default(1);
$t->integer('role_id')->unsigned();
$t->text('bio');

// created_at, updated_at DATETIME$t->timestamps();
我们开始通过定义主键表:

$t->increments('id');
这个生成的SQL:

`id`INT(11) NOTNULLAUTO_INCREMENT,
创建一个列 name默认长度为255(NOT NULL约束是通过Laravel隐式地执行):

$t->string('name');
这个生成的SQL:

`name`VARCHAR(255) NOTNULL,
创建一个数字列 age(显式地允许 NULL值):

$t->integer('age')->nullable();
这个生成的SQL:

`age`INT(11) NULLDEFAULTNULL,
创建一个布尔值列 active默认值为1:

$t->boolean('active')->default(1);
这个生成的SQL:

`active`TINYINT(4) NOTNULLDEFAULT'1',
创建一个数字列 role_id的列类型 UNSIGNED:

$t->integer('role_id')->unsigned();
这个生成的SQL:

`role_id`INT(10) UNSIGNEDNOTNULL,
创建一个文本字段命名 bio:

$t->text('bio');
这个生成的SQL:

`bio`TEXTNOTNULL,
创建两个时间戳字段:

$t->timestamps();
这个生成的SQL:

`created_at`TIMESTAMPNOTNULLDEFAULT'0000-00-00 00:00:00',
`updated_at`TIMESTAMPNOTNULLDEFAULT'0000-00-00 00:00:00',
我希望你意识到可能的迁移。而不是写晦涩难懂的SQL DDL语句,你只是调用一些容易记住的Laravel模式构建器方法!

很好,现在我们已经创建了我们的表!但是当用户想回滚迁移?由于我们创建的表 up()方法,现在我们需要 DROP的表 down()方法,这样的模式就回滚后回到原来的形式。幸运的是,模式类都有一个 drop()方法将执行。

publicfunctiondown()
{
        Schema::drop('authors');
}
的 down()方法非常简单,因为它只有一行。它从数据库中删除“作者”表。如果您熟悉基本的SQL,这是一样的 DROP TABLE authors。当我们回滚迁移,Laravel将下降“作者”表。

好的,在这一点上我们写的模式。现在,您已经创建了迁移文件,您可以对数据库执行它。让我们回到命令提示符(去Laravel应用程序根文件夹)并运行 artisan migrate命令:

$ php artisan migrate
Migrated: 2012_12_25_161424_create_authors_table
太棒了!如果我们看看作者数据库表已经成功创建:

MariaDB [laravel_db]> SHOW TABLES;
+----------------------+
| Tables_in_laravel_db |
+----------------------+
| authors    .   .   . |
| migrations .   .   . |
+----------------------+
2 rows in set (0.00 sec)

MariaDB [laravel_db]> DESCRIBE authors;
+------------+------------------+------+-----+---------------------+----------------+
| Field      | Type             | Null | Key | Default             | Extra          |
+------------+------------------+------+-----+---------------------+----------------+
| id         | int(11)          | NO   | PRI | NULL                | auto_increment |
| name       | varchar(255)     | NO   |     | NULL                |                |
| age        | int(11)          | YES  |     | NULL                |                |
| active     | tinyint(4)       | NO   |     | 1                   |                |
| role_id    | int(10) unsigned | NO   |     | NULL                |                |
| bio        | text             | NO   |     | NULL                |                |
| created_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
+------------+------------------+------+-----+---------------------+----------------+
8 rows in set (0.00 sec)
数据库现在有一个表来存储作者信息,你没有太多的工作要做成就这事。相比较而言,这是SQL查询是什么样子,如果你想通过手写的SQL语句创建表:

CREATETABLE`authors` (
        id          intAUTO_INCREMENTNOTNULL,
        name        varchar(255) NOTNULL,
        age         int,
        active      tinyintNOTNULLDEFAULT'1',
        role_id     int(10) UNSIGNEDNOTNULL,
        bio         textNOTNULL,
        created_at  timestampNOTNULLDEFAULT'0000-00-00 00:00:00',
        updated_at  timestampNOTNULLDEFAULT'0000-00-00 00:00:00',
        email       varchar(64) NOTNULL,
        /* Keys */PRIMARYKEY (id)
) ENGINE = InnoDB;
我不知道你,但是我宁愿写几行PHP尝试匹配SQL语句的语法和数据类型。

下次你想修改数据模型,您可以创建一个新移民,然后运行 artisan migrate一次。每次运行 migrate命令,它开始在第一个迁移文件(基于时间戳的文件名),检查它是否已被执行。如果它一直运行,就跳到下一个文件,直到找到一个起点开始执行。后发现这一点,它运行所有迁移,迁移和在那之后直到到达尽头。

现在,想象一下我们犯了一个错误,想回去撤消更改。要做到这一点,我们简单地使用 artisan命令如下:

$ php artisan migrate:rollback
Rolled back: 2012_12_25_161832_create_authors_table
它是那么容易。它将回滚过去迁移你跑。因为我们创造了“作者”表在前面的迁移,这个命令将删除表。你可以在数据库中证实了这一点:

MariaDB [laravel_db]> SHOW TABLES;
+----------------------+
| Tables_in_laravel_db |
+----------------------+
| migrations . . . . . |
+----------------------+
1 row in set (0.00 sec)
让我们重新应用迁移:

$ php artisan migrate
过了一会儿,你意识到需要一个“电子邮件”专栏作者表,你需要改变表模式。要做到这一点,只需创建一个新的移民使用 artisan migrate:make命令。因为我们现有的表添加一个新的列,我们使用了一个描述性的名称来识别新的迁移:

$ php artisan migrate:make add_email_to_authors_table
Migration created successfully!
的确,添加了一个新的迁移文件:

$ ls app\database\migrations
2012_12_25_161832_create_authors_table.php
2012_12_27_092602_add_email_to_authors_table.php
让我们打开新生成的迁移脚本,将“电子邮件”列添加到我们的桌子。

publicfunctionup()
{
        Schema::table('authors', function($t) {
                $t->string('email', 64);
        });
}
我们使用 Schema::table()方法开始使用“作者”表。在闭包函数,我们添加“电子邮件”字段。

现在,版本控制,如何取消?我们再次使用 Schema::table()方法在桌子上工作:

publicfunctiondown()
{
        Schema::table('authors', function($t) {
                $t->dropColumn('email');
        });
}
我们将使用新添加的列 dropColumn()方法。

让我们看看效果如何…

$ php artisan migrate
Migrated: 2012_12_27_092602_add_email_to_authors_table
你可以在数据库中验证迁移:

MariaDB [laravel_db]> DESCRIBE authors;
+------------+------------------+------+-----+---------------------+----------------+
| Field      | Type             | Null | Key | Default             | Extra          |
+------------+------------------+------+-----+---------------------+----------------+
| id         | int(11)          | NO   | PRI | NULL                | auto_increment |
| name       | varchar(255)     | NO   |     | NULL                |                |
| age        | int(11)          | YES  |     | NULL                |                |
| active     | tinyint(4)       | NO   |     | 1                   |                |
| role_id    | int(10) unsigned | NO   |     | NULL                |                |
| bio        | text             | NO   |     | NULL                |                |
| created_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| email      | varchar(64)      | NO   |     | NULL                |                |
+------------+------------------+------+-----+---------------------+----------------+
9 rows in set (0.00 sec)
让我们撤销之前的迁移…

$ php artisan migrate:rollback
Rolled back: 2012_12_27_092602_add_email_to_authors_table
检查数据库确认字段被移除:

MariaDB [laravel_db]> DESCRIBE authors;
+------------+------------------+------+-----+---------------------+----------------+
| Field      | Type             | Null | Key | Default             | Extra          |
+------------+------------------+------+-----+---------------------+----------------+
| id         | int(11)          | NO   | PRI | NULL                | auto_increment |
| name       | varchar(255)     | NO   |     | NULL                |                |
| age        | int(11)          | YES  |     | NULL                |                |
| active     | tinyint(4)       | NO   |     | 1                   |                |
| role_id    | int(10) unsigned | NO   |     | NULL                |                |
| bio        | text             | NO   |     | NULL                |                |
| created_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
+------------+------------------+------+-----+---------------------+----------------+
8 rows in set (0.00 sec)
多一点时间的流逝,你意识到电子邮件列应该是唯一的。两位作者不能有相同的电子邮件地址。

让我们创建另一个迁移:

$ php artisan migrate:make set_email_to_unique_on_authors_table
Migration created successfully!
让我们打开迁移脚本,添加以下代码:

publicfunctionup()
{
    Schema::table('authors', function($t) {
        $t->unique('email', 'authors_email_unique');
    });
}
“电子邮件”专栏以来已经存在在我们的表,我们简单地创建一个新的唯一索引使用 unique()方法。的 unique()方法接受两个参数:列名和索引的名称。

现在,让我们写回滚代码:

publicfunctiondown()
{
        Schema::table('authors', function($t) {
                $t->dropUnique('authors_email_unique');
        });
}
正如你所看到的,我们使用 dropUnique()方法删除索引创建的 up()方法。

不可以自动回滚到一个特定迁移之前,所以你必须运行该命令反复直到你达到这一迁移。不过你可以重置所有迁移,你曾经只是通过运行:

$ php artisan migrate:reset
就是这样!我希望你找到Laravel迁移解决方案以避免所有的小时的痛苦你经历了管理数据库模式。为进一步的信息,请参考官方Laravel文档.

下面的表列出额外Laravel模式构建器方法可用在迁移类:

表级操作

Laravel方法	目的
create()	创建表和一个名字。第二个参数是一个闭包,其中应该containc表定义。
drop()	表可以被使用 drop()方法调用。正如所料,删除一个表也会删除所有和任何索引的列。
dropIfExists()	滴表如果它存在。
rename($to)	给定的名称重命名表。
列级操作

Laravel方法	目的
dropColumn($columns)	表明,给定的列应该下降。记住,任何索引相关的列也将被删除。
dropColumns()	表明,给定的列应该下降。
索引级别的操作

Laravel方法	目的
primary($columns, $name = null)	指定表的主键(s)。
unique($columns, $name = null)	指定一个唯一索引的表。
index($columns, $name = null)	指定一个索引的表。
foreign($columns, $name = null)	指定一个表的外键。
dropPrimary($index = null)	表明,给定的主键应该下降。
dropUnique($index)	表明,给定的唯一键应该下降。
dropIndex($index)	表明,给定索引应该下降。
dropForeign($index)	表明,给定的外键应该下降。
